package cn.itcast.user.web;

import cn.itcast.user.client.UserClient;
import cn.itcast.user.pojo.User;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
@RequestMapping("/consumer")
public class ConsumerControllerFeign {

    @Autowired
    private UserClient userClient;

    @GetMapping("/{id}")
//    @HystrixCommand(fallbackMethod = "queryByIdFallBack")
    public User queryById(@PathVariable("id") Long id) {

        if (id == 1) {

            throw new RuntimeException("服务太火爆了");

        }

        return this.userClient.queryById(id);

    }

    /** 在Feign中对Hystrix支持的方式有两种
     *      1. 和之前的方式一样：就是下面这种方式 在方法上添加注解 HystrixCommand以及编写一个回调方法
     *                  超时或者线程池中没有可用连接了
     *      2. 编写一个UserClient的实现类 UserClientFallBack，并重写接口中的方法
     *                  以及在接口上的注解FeignClient中添加 fallback的属性 fallback = UserClientFallBack.class
     *                      回调类的字节码文件
     * @param id
     * @return
     */
//    public User queryByIdFallBack(Long id) {
//
//        User user = new User();
//
//        user.setId(id);
//
//        user.setName("当前服务太火爆，请稍后访问");
//
//        user.setNote("都说了太火爆，别访问了");
//
//        return user;
//
//    }


}
